package es.usj.dssie.videoclub.controller;

import java.io.IOException;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Properties;

/** Clase que sirve para recuperar pares valor/clave de un archivo properties
 * Esta clase leer� del archivo database.properties que en un principio se emplear�
 * para la selecci�n din�mica del nombre de usuario, contrase�a y url del
 * acceso a la base de datos, pudiendo cambiarse con facilidad para toda 
 * la aplicaci�n.
 *
 */
public class PropertyManager {
	
	private Hashtable<String, String> hashTable = null;
	
	private static PropertyManager instance = null;
	
	private Properties properties = null;
	private static final String PROPERTIES_FILENAME = "weather.properties";

	/**
	 * Constructor de la clase PropertyManager.
	 * crea un objeto Properties y carga el archivo .properties
	 * de donde leer� los datos que haya.
	 *
	 */
	private PropertyManager() {
		properties = new Properties();
		try {
			properties.load(this.getClass().getClassLoader().getResourceAsStream(PROPERTIES_FILENAME));
			this.createHashtable();
		} catch (IOException e) {
		
		}
	}
	/**
	 * Metoo get para la variable instance, con este metodo se consigue 
	 * hacer el patron Singleton.
	 * @return  una unica instancia de PropertyManager
	 */
	public static PropertyManager getInstance() {
		if (instance == null) {
			instance = new PropertyManager();
			return instance;
		} else {
			return instance;
		}
	}
	/**
	 * Metodo en el cual se crea un HashTable y se inicializa 
	 * con los valores que hay en el archivo de propiedades
	 */
	private void createHashtable() {
		hashTable = new Hashtable<String, String>();
		Iterator i = properties.keySet().iterator();
		
		while (i.hasNext()) {
			String key = (String) i.next();
			hashTable.put(key, properties.getProperty(key));
		}
	}
	/**
	 * Metodo get para una propiedad, con este metodo
	 * se obtiene del archivo de propiedades el valor de 
	 * una clave
	 * @param property propiedad que se obtiene al leer el archivo .properties
	 * @return valor leido en forma de String
	 */
	public String getProperty(String property) {
		String valor = (String) hashTable.get(property);
		return valor;		
	}
}
